// pages/admin/create-activation-code/create-activation-code.js
const app = getApp();
const { request } = require('../../../utils/request');
const api = require('../../../utils/api.js');
const codeApi = require('../../../utils/codeApi.js');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    count: 1, // 默认生成10个
    usageCount: 300, // 默认每个卡密可用1次
    generating: false, // 是否正在生成中
    generatedCodes: [], // 生成的激活码列表
    agentInfo: null, // 代理信息
    hasPermission: false, // 是否有权限
    totalNeeded: 10, // 需要的总次数
    remainingCount: 0, // 代理剩余使用次数
    codeCount:0,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 处理从其他页面传递的分值参数
    if (options.score) {
      this.handleScoreOptions(options);
    }
    
    // 首先检查代理权限
    this.checkAgentPermission();
  },
  
  /**
   * 处理分值选项
   */
  handleScoreOptions(options) {
    if (options.count) {
      const count = parseInt(options.count);
      if (!isNaN(count) && count > 0) {
        this.setData({ usageCount: count });
      }
    }
    
    // 更新总计需要的次数
    this.updateTotalNeeded();
  },

  /**
   * 检查代理权限
   */
  checkAgentPermission() {
    // 确保用户ID存在
    const userId = wx.getStorageSync('userId');
    
    if (!userId) {
      wx.showModal({
        title: '提示',
        content: '未登录或登录已过期，请先登录',
        showCancel: false,
        success: () => {
          wx.navigateTo({
            url: '/pages/login/login'
          });
        }
      });
      return;
    }
    
    // 使用专用API检查权限
    codeApi.checkPermission(userId)
    .then(res => {
      if (res.code === 0 && res.data && res.data.has_permission) {
        // 保存代理信息
        this.setData({
          hasPermission: true,
          agentInfo: res.data.agent_info || {},
          remainingCount: res.data.agent_info ? (res.data.agent_info.max_generation_count - res.data.agent_info.used_generation_count || 0) : 0
        });
        
        // 更新总计需要的次数
        this.updateTotalNeeded();
      } else {
        // 没有权限
        wx.showModal({
          title: '提示',
          content: '您暂无卡密管理权限',
          showCancel: false,
          success: () => {
            wx.navigateBack();
          }
        });
      }
    })
    .catch(err => {
      console.error('检查权限失败', err);
      
      wx.showToast({
        title: '网络错误',
        icon: 'none',
        success: () => {
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        }
      });
    });
  },

  /**
   * 处理数量输入
   */
  onCountInput(e) {
    let count = parseInt(e.detail.value);
    
    // 限制数量范围
    if (isNaN(count) || count <= 0) {
    } else if (count > 100) {
      count = 100;
    }
    
    this.setData({ count });
    
    // 更新总计需要的次数
    this.updateTotalNeeded();
  },

  /**
   * 处理使用次数输入
   */
  onUsageCountInput(e) {
    let usageCount = parseInt(e.detail.value);
    
    // 限制次数范围
    if (isNaN(usageCount) || usageCount <= 0) {
    } else if (usageCount > 999) {
      usageCount = 999;
    }
    
    this.setData({ usageCount });
    
    // 更新总计需要的次数
    this.updateTotalNeeded();
  },
  
  /**
   * 更新总计需要的次数
   */
  updateTotalNeeded() {
    const { count, usageCount } = this.data;
    const totalNeeded = count * usageCount;
    
    this.setData({ totalNeeded });
  },

  /**
   * 生成激活码
   */
  generateCodes() {
    // 检查输入
    const { count, usageCount, agentInfo, totalNeeded, remainingCount } = this.data;
    
    if (!agentInfo || !agentInfo.id) {
      wx.showToast({
        title: '无法获取代理信息',
        icon: 'none'
      });
      return;
    }
    
    if (count <= 0 || count > 100) {
      wx.showToast({
        title: '生成数量应在1-100之间',
        icon: 'none'
      });
      return;
    }
    
    if (usageCount <= 0) {
      wx.showToast({
        title: '使用次数必须大于0',
        icon: 'none'
      });
      return;
    }
    
    // 检查代理剩余次数是否足够
    if (totalNeeded > remainingCount) {
      wx.showModal({
        title: '次数不足',
        content: `生成${count}个${usageCount}次的卡密需要${totalNeeded}次总额度，您当前剩余${remainingCount}次，请减少数量或联系管理员增加额度。`,
        showCancel: false
      });
      return;
    }
    
    // 开始生成
    this.setData({ generating: true });
    
    const params = {
      count: count,
      agent_id: agentInfo.id,
      expire_days: 0,  // 永久有效
      usage_count: usageCount // 添加使用次数
    };
    
    // 调用API生成卡密
    codeApi.generateCodes(params)
    .then(res => {
      if (res.code === 0 && res.data) {
        // 保存生成的激活码
        this.setData({
          codeCount:res.data.count,
          generatedCodes: res.data.codes || [],
          generating: false
        });
        
        // 更新代理剩余次数
        if (res.data.agent && res.data.agent.remaining_count !== undefined) {
          this.setData({
            remainingCount: res.data.agent.remaining_count
          });
        }
        
        wx.showToast({
          title: `成功生成${res.data.count || count}个卡密`,
          icon: 'success'
        });
      } else {
        this.setData({ generating: false });
        wx.showToast({
          title: res.message || '生成失败',
          icon: 'none'
        });
      }
    })
    .catch(err => {
      console.error('生成卡密失败', err);
      this.setData({ generating: false });
      
      wx.showToast({
        title: err.message || '网络错误',
        icon: 'none'
      });
    });
  },
  
  /**
   * 返回上一页
   */
  goBack() {
    wx.navigateBack();
  },
  
  /**
   * 复制激活码
   */
  copyCode(e) {
    const index = e.currentTarget.dataset.index;
    const code = this.data.generatedCodes[index];
 
    
    if (!code) {
      wx.showToast({
        title: '激活码不存在',
        icon: 'none'
      });
      return;
    }
    
    wx.setClipboardData({
      data: code.code,
      success: () => {
        wx.showToast({
          title: '复制成功',
          icon: 'success'
        });
        
        // 标记为已复制
        codeApi.markAsCopied(code.id)
          .then(() => {
            // 更新本地数据
            const generatedCodes = [...this.data.generatedCodes];
            generatedCodes[index].is_copied = true;
            this.setData({ generatedCodes });
          })
          .catch(err => {
            console.error('标记已复制失败', err);
          });
      },
      complete:res=>{
        wx.showToast({
          title: '复制成功',
          icon: 'success'
        });
      }
    })
  },

  /**
   * 复制所有激活码
   */
  copyAllCodes() {
    const { generatedCodes } = this.data;
    
    if (!generatedCodes || generatedCodes.length === 0) {
      return;
    }
    
    // 将所有激活码格式化为一行一个
    const allCodes = generatedCodes.map(code => code.code).join('\n');
    
    wx.setClipboardData({
      data: allCodes,
      success: () => {
        // 批量标记为已复制
        const codeIds = generatedCodes.map(code => code.id);
        this.batchMarkAsCopied(codeIds);
        
        wx.showToast({
          title: '已复制所有卡密',
          icon: 'success'
        });
      }
    });
  },

  /**
   * 标记所有激活码为已导出
   */
  markAllAsExported() {
    const { generatedCodes } = this.data;
    
    if (!generatedCodes || generatedCodes.length === 0) {
      return;
    }
    
    // 批量标记为已导出
    const codeIds = generatedCodes.map(code => code.id);
    this.batchMarkAsExported(codeIds);
  },

  /**
   * 根据激活码内容查找ID
   */
  findCodeIdByValue(codeValue) {
    const code = this.data.generatedCodes.find(item => item.code === codeValue);
    return code ? code.id : null;
  },

  /**
   * 标记为已复制
   */
  markAsCopied(codeId) {
    codeApi.markAsCopied(codeId).then(res => {
      console.log('标记为已复制', res);
    }).catch(err => {
      console.error('标记失败', err);
    });
  },

  /**
   * 批量标记为已复制
   */
  batchMarkAsCopied(codeIds) {
    codeApi.batchMarkCopied(codeIds).then(res => {
      console.log('批量标记为已复制', res);
    }).catch(err => {
      console.error('批量标记失败', err);
    });
  },

  /**
   * 批量标记为已导出
   */
  batchMarkAsExported(codeIds) {
    codeApi.batchMarkExported(codeIds).then(res => {
      if (res.code === 0) {
        wx.showToast({
          title: '已标记为导出',
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.message || '标记失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('批量标记失败', err);
      wx.showToast({
        title: '网络错误',
        icon: 'none'
      });
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})